/**
 * @description 登录验证中间件
 */

const { ErrorModel } = require("../model/ResModel");
const { loginCheckFailInfo } = require("../model/ErrorInfo");

/**
  * API 登录验证
  * @param {object} ctx  koa中ctx
  * @param {function} next
  */
async function loginCheck(ctx, next) {

  // 查看session是否存在并且是否有用户信息，双重保险
  if (ctx.session && ctx.session.userInfo) {
    // 已登录
    await next();
    return;
  }

  // 未登录  返回ErrorModel
  ctx.body = new ErrorModel(loginCheckFailInfo);
}

/**
  * 页面登录验证
  * @param {object} ctx  koa中ctx
  * @param {function} next
  */
async function loginRedirect(ctx, next) {
  // 查看session是否存在并且是否有用户信息，双重保险
  if (ctx.session && ctx.session.userInfo) {
    // 已登录
    await next();
    return;
  }

  // 未登录
  // 获取当前的url
  const curUrl = ctx.url;
  // 这个对url做个处理
  // login?url=xxx
  // 这样做是为了前端访问某个页面时，如果没有登录跳转到登录页面，当登录后直接换回最初访问的页面，避免每次登录都返回首页，用户体验会更好
  ctx.redirect("/login?url=" + encodeURIComponent(curUrl));

}

module.exports = {
  loginCheck,
  loginRedirect
};